home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
NEW
/
V-TPUG Programming Contest
/
(n)v1.d64
/
cubic
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2009-01-19
|
2KB
|
58 lines
100 PRINT "[147]"
110 PRINT"THE GENERALIZED CUBIC"
120 PRINT"EQUATION HAS THE FORM"
130 PRINT"A*X^3+B*X^2+C*X+D = 0":PRINT
140 PRINT"A,B,C,D ARE CALLED THE";:PRINT" COEFFICIENTS. THIS"
150 PRINT"PROGRAM SOLVES FOR ALL";
160 PRINT"THREE VALUES OF X THAT";
170 PRINT"WILL SATISFY THE CUBIC";
180 PRINT" EQUATION FOR A GIVEN"
190 PRINT" SET OF COEFFICIENTS.":PRINT
200 PRINT"FOR SOME COEFFICIENTS,";
210 PRINT" 2 OF THE 3 SOLUTIONS"
220 PRINT"ARE COMPLEX CONJUGATES"
230 PRINT"IN THESE CASES WE USE"
240 PRINT " ";CHR$(34);"J";CHR$(34);"=SQR(-1)"
250 PRINT:PRINT:PRINT"PRESS ANY KEY TO GO ON";
260 GET G$:IF G$="" THEN 260
270 PRINT"[147]"
280 PRINT"FOR THE CUBIC EQUATION":PRINT"THAT YOU WANT TO SOLVE"
290 PRINT"ENTER THE COEFFICIENTS"
300 PRINT" STARTING WITH THE":PRINT:PRINT" CUBIC TERM"
310 INPUT A1,A2,A3,A4
320 P=A2/A1:Q=A3/A1:R=A4/A1
330 A=(3*Q-P^2)/3:B=(2*P^3-9*P*Q+27*R)/27
340 D=B^2/4+A^3/27
350 BO=ABS(B^2/4)+ABS(A^3/27)
360 IF ABS(D)/BO<1E-7 THEN D=0
370 IF D>0 THEN PRINT"[147]THERE IS ONE REAL ROOT":PRINT" AND A CONJUGATE PAIR":GOSUB610
380 IF D=0 THEN PRINT"[147]THERE ARE THREE REAL":PRINT"ROOTS-AT LEAST 2 EQUAL":GOSUB610
390 IF D<0 THEN PRINT"[147] THERE ARE THREE REAL":PRINT" AND UNEQUAL ROOTS":GOSUB610
400 AQ=-B/2+SQR(D):S=SGN(AQ):AQ=AQ*S
410 CA=S*EXP(LOG(AQ)/3)
420 BQ=-B/2-SQR(D):S=SGN(BQ):BQ=BQ*S
430 CB=S*EXP(LOG(BQ)/3)
440 PRINT "[147] THE REAL ROOT IS"
450 PRINT TAB(3)CA+CB-P/3
460 PRINT " THE PAIRED ROOTS ARE"
470 IF D=0 THEN PRINT TAB(3)-(CA+CB)/2-P/3:GOTO 600
480 RE$=STR$(-(CA+CB)/2-P/3):RE$=RIGHT$(RE$,LEN(RE$)-1)
490 IM$=STR$(SQR(3)*(CA-CB)/2):IM$=RIGHT$(IM$,LEN(IM$)-1)
500 IFD>0THEN PRINT TAB(3)RE$;:IF(21-POS(X))>LEN(IM$)+3 THEN PRINT"+/-";IM$;"J":GOTO600
510 PRINT:PRINT TAB(5)"+/-";IM$;"J":GOTO600
520 CP=-B/2/SQR(-A^3/27)
530 PH=-ATN(CP/SQR(1-CP^2))+(null)/2
540 CM=2*SQR(-A/3)
550 X1=CM*COS(PH/3):X2=CM*COS((PH+2*(null))/3):X3=CM*COS((PH+4*(null))/3)
560 PRINT "[147] THE THREE ROOTS ARE"
570 PRINT TAB(3) X1-P/3
580 PRINT TAB(3) X2-P/3
590 PRINT TAB(3) X3-P/3
600 END
610 FOR J=1 TO 1500:NEXT
620 IF D<0 THEN 520
630 GOTO 400
640 RETURN
650 DATA234,234,234,96
660 PRINT TAB(3) X1-P/314 PRINT TAB(3) X2-P/3